let flag = false
const activityBaseKey = 'redis_activity_base_info'
const $queueKey = `REDIS_ACTIVITY_RED_RAIN_SUCCESS`
const $queueBak = `REDIS_DISTRIBUTE_RED_RAIN_SUCCESS`
const queueController = 'redis_isrun_stoptask' //控制队列开启或暂停

class RedRaid {
  constructor(ctx) {
    this.ctx = ctx;
    this.redis = ctx.app.redis
  }
  /**
  * 推送到具体的队列
  */
  async send(str) {
    const redis = this.redis;
    let temp = str.split('-')
    let key = `${activityBaseKey}:${temp[0]}`
    // 查询活动是否存在
    if (!temp[0] || !temp[1] || !temp[2]) {
      logger.debug(`参数错误-->${JSON.stringify(temp)}`)
      return
    }

    if (!await redis.exists(key)) {
      logger.debug(`活动不存在-->${JSON.stringify(temp)}`)
      return
    }
    let level = this.getLevel(temp);
    // loggers.info(`用户${temp[2]}发送${level}级奖品`)

    let params = {
      activityId: temp[0],
      combinationId: temp[1],        //活动渠道关系id
      userId: temp[2],
      level: level,
      redPacketCount: 1,
      remainMon: 0,
      saveType: 1
    }

    // 发送奖品

    let res = await this.ctx.service.sendPrize.send(params)
    console.log(res,'------')
    // let params = {
    //   $activityId: temp[0], // 活动id
    //   $combinationId: temp[1], //活动渠道关系id
    //   $userId: temp[2], // 用户id
    //   $level: level, // 活动规则
    //   $redPacketMultiple: 1, // 每次发送红包的数量
    //   $redPaketMoney: 0, // 红包的金额
    //   $maxTime: 99999, // 单个用户最大领取次数
    //   remainMon: 0, // 用户投资钱数
    //   buyWay: 2, // 购买方式：1-投资理财|2-现金购买
    //   $productId: 0,
    //   sendAwradSwitch: 1, // 控制奖品是否发送开关1：开
    //   changeNum: 0,                     // 控制机会是否发送开关1：开
    //   changeId: 0,             // 8.机会id
    //   saveType: 1,             // 8.redis中奖品key的类型，默认按活动区分，传1按活动天数区分
    // }
    // // 发送机会
    // await CouponAndRedPacketMod.parseCustomActivityMultilAwardNotTimeUniversal(params)
  }

  getLevel(temp) {
    // loggers.info(`出队`)
    //
    if (temp[3] == 1) {
      loggers.info(`用户${temp[2]}获得大额红包`);
      return 1
    }
    let random = Math.random() * 100, level
    if (0 <= random && random < 10) {
      level = 2
    } else if (10 <= random && random < 50) {
      level = 3
    } else {
      level = 4
    }
    return level
  }
  sleep(time) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve()
      }, time || 1000);
    })
  }

}

module.exports = {
  schedule: {
    interval: '1s', // 1 分钟间隔
    type: 'all', // 指定所有的 worker 都需要执行
    disable:false,
  },
  async task(ctx) {
    if (flag) {
      return
    }
    //发送逻辑实例化
    // try {
    //   const redRaid = new RedRaid(ctx);
    //   while (true) {
    //     flag = true
    //     const redis = ctx.app.redis
    //     if (!await redis.exists(queueController) || await redis.get(queueController) == 1) {
    //       const str = await redis.rpoplpush($queueKey, $queueBak)
    //       if (str) {
    //         redRaid.send(str)
    //         redis.lrem($queueBak, 1, str)
    //       } else {
    //         // console.log(ctx.service.sendPrize.send)
    //         await redRaid.sleep(2000);
    //         console.log('红包雨队列暂无数据')
    //         ctx.logger.info('红包雨队列暂无数据')
    //       }
    //     } else {
    //       await redRaid.sleep(2000);
    //       console.log('红包雨队列已暂停')
    //       ctx.logger.info('红包雨队列已暂停')
    //     }
    //   }
    // } catch (error) {
    //   console.log(error, '-----')
    //   console.log('红包雨发送队列报错')
    // }
  }
};







